/**
 * 增加了非绑定模式下的CSS样式
 * */
package cn.biplam.front.template.control.table.cell;

import cn.biplam.common.wrapper.ErrorMessage;
import cn.biplam.front.html.HtmlDiv;
import cn.biplam.front.html.base.Html;
import cn.biplam.front.html.base.HtmlWindow;
import cn.biplam.front.template.Template;

/**
 * 表格单元格模版<br>
 * 用于封装html对象放入表格
 * @author XiaoRuxing 2009-6-18下午06:04:19
 * @version 1.0
 */
public abstract class Cell implements Template{
	
	/** css的占位宽度 */
	protected int cssWidth;
	/** 每个单元格由Div封装 */
	protected HtmlDiv cellDiv;
	
	public Cell(){
		this(true);
	}
	
	/**
	 * 构造方法
	 * @param isBind	单元格是否绑定
	 */
	public Cell(boolean isBind){
		if(isBind){
			cellDiv=new HtmlDiv(null,"dt");
		}else{
			cellDiv=new HtmlDiv(null,"dto");
		}
		this.cssWidth=8;//padding:6px+border:2px
	}

	
	/**
	 * 放入html对象到单元格 
	 * @param html html对象
	 * @throws ErrorMessage
	 */
	public void put(Html html) throws ErrorMessage{
		cellDiv.put(html);
	}
	
	/**
	 * 放入多个html对象到单元格
	 * @param html html对象组
	 * @throws ErrorMessage
	 */
	public void put(HtmlWindow... html) throws ErrorMessage{}
	
	/**
	 * 获取单元格具体内容  
	 */
	protected abstract void getContent() throws ErrorMessage;
	
	/**
	 * 获取单元格内部内容宽度 
	 * @return 单元格内部宽度
	 * @throws ErrorMessage 
	 */
	protected abstract int _getLength() throws ErrorMessage;
	
	/**
	 * 获取单元格宽度
	 * @return
	 * @throws ErrorMessage 
	 */
	public int getLength() throws ErrorMessage{
		return this._getLength()+this.cssWidth;
	}
	
	/**
	 * 返回单元格 
	 * @return
	 * @throws ErrorMessage 
	 */
	public HtmlWindow get() throws ErrorMessage{
		getContent();
		return this.cellDiv;
	}
}
